package com.yida.gwj.vote.service;


import com.yida.common.core.domain.R;
import com.yida.gwj.api.domain.dto.GwjGVoteResultInnerDTO;
import com.yida.gwj.api.domain.request.GwjVoteResultInnerRequest;
import com.yida.gwj.vote.domain.GwjVoteHouse;
import com.yida.gwj.vote.domain.GwjVoteResultDetail;
import com.yida.gwj.vote.domain.dto.GwjEVoteResultDetailListDTO;
import com.yida.gwj.vote.domain.dto.GwjGVoteResultDetailListDTO;
import com.yida.gwj.vote.domain.request.GwjVoteResultDetailQueryRequest;

import java.util.List;

/**
 * 投票结果详情Service接口
 *
 * @author lqq
 * @date 2023-03-22
 */
public interface IGwjVoteResultDetailService {

    /**
     * 查询投票结果详情
     *
     * @param detailId 投票结果详情主键
     * @return 投票结果详情
     */
    public GwjVoteResultDetail selectVoteResultDetailByDetailId(Long detailId);

    /**
     * 查询投票结果详情列表
     *
     * @param voteResultDetail 投票结果详情
     * @return 投票结果详情集合
     */
    public List<GwjVoteResultDetail> selectVoteResultDetailList(GwjVoteResultDetail voteResultDetail);

    /**
     * 新增投票结果详情
     *
     * @param voteResultDetail 投票结果详情
     * @return 结果
     */
    public int insertVoteResultDetail(GwjVoteResultDetail voteResultDetail);

    /**
     * 修改投票结果详情
     *
     * @param voteResultDetail 投票结果详情
     * @return 结果
     */
    public int updateVoteResultDetail(GwjVoteResultDetail voteResultDetail);

    /**
     * 批量删除投票结果详情
     *
     * @param detailIds 需要删除的投票结果详情主键集合
     * @return 结果
     */
    public int deleteVoteResultDetailByDetailIds(Long[] detailIds);

    /**
     * 删除投票结果详情信息
     *
     * @param detailId 投票结果详情主键
     * @return 结果
     */
    public int deleteVoteResultDetailByDetailId(Long detailId);

    /**
     * 新增投票结果详情
     *
     * @param voteResultDetails 投票结果详情
     * @return 结果
     */
    int insertBatchVoteResultDetail(List<GwjVoteResultDetail> voteResultDetails);

    /**
     * 删除投票结果详情信息
     *
     * @param resultId 投票结果主键
     * @return 结果
     */
    int deleteVoteResultDetailByResultId(Long resultId);

    /**
     * 查询电子投票结果详情列表
     *
     * @param request 请求参数
     * @return /
     */
    List<GwjEVoteResultDetailListDTO> selectEVoteResultDetailDTOList(GwjVoteResultDetailQueryRequest request);

    /**
     * 查询公维金投票结果详情列表
     *
     * @param request 请求参数
     * @return /
     */
    List<GwjGVoteResultDetailListDTO> selectGVoteResultDetailDTOList(GwjVoteResultDetailQueryRequest request);

    /**
     * 根据投票id统计投票人数
     *
     * @param voteId 投票ID
     * @return 结果
     */
    int countVoteOwnerByVoteId(Long voteId);

    /**
     * 根据投票id统计投票同意人数
     *
     * @param voteId 投票ID
     * @return 结果
     */
    int countAgreeVoteOwnerByVoteId(Long voteId);

    /**
     * 查询投票结果详情的房屋信息
     *
     * @param voteId 投票ID
     * @return 投票结果详情集合
     */
    List<GwjVoteHouse> selectVoteResultHouseListByVoteId(Long voteId);

    /**
     * 查询投票结果详情的房屋信息
     *
     * @param voteResultDetail 投票详情
     * @return 投票结果详情集合
     */
    List<GwjVoteHouse> selectVoteResultHouseList(GwjVoteResultDetail voteResultDetail);

    /**
     * 根据投票选项统计投票结果详情
     *
     * @param optionId 投票选项ID
     * @return 结果
     */
    int countVoteResultDetailByOptionId(String optionId);

    /**
     * 查询业务的投票结果
     *
     * @param request 请求参数
     * @return /
     */
    R<List<GwjGVoteResultInnerDTO>> innerVoteResult(GwjVoteResultInnerRequest request);
}
